01 IIC
up的视频讲解从两条共享总线开始,理解开漏、时钟、地址和应答怎样配合完成通信。
1 两条线连接多个设备
IIC(I²C) 是集成电路间总线。SCL 是串行时钟线,SDA 是串行数据线。多个设备可以连接到同一组线路,由地址区分通信对象。

与 UART 的独立收发线不同,IIC 的发送和接收共用 SDA,因此同一时刻只沿一个方向传输。主设备组织通信并产生时钟,从设备按照约定参与收发。
2 为什么使用开漏和上拉
开漏输出只能主动拉低或释放线路。所有设备释放时,上拉电阻使总线回到高电平;任何一个设备拉低,总线就为低电平。

这形成了“线与”的效果:只要有一个参与者给出低电平,整体就为低电平。它也为时钟拉伸提供了条件。
时钟拉伸
从设备还没有准备好时,可以保持 SCL 为低电平;主设备释放线路后,需要等它真正回到高电平再继续相应时序。

上拉电阻与速度
上拉电阻和总线电容共同影响上升速度。电阻过大,上升沿可能变慢;电阻过小,拉低时的电流增大。以常见的 4.7 kΩ 为例,实际仍需结合总线负载和器件要求。

课程涉及 100 kHz 标准模式与 400 kHz 快速模式。总线的高电平由上拉电源决定,连接设备前要确认所有引脚都能承受该电压。
3 从开始到结束读懂一次传输

| 时序 | SCL 与 SDA 的配合 |
|---|---|
| 开始 | SCL 为高时,SDA 由高变低 |
| 数据 | 通常在 SCL 为低时改变 SDA,在高电平期间保持数据稳定 |
| 应答 ACK | 第九个时钟由接收方拉低 SDA |
| 停止 | SCL 为高时,SDA 由低变高 |
数据以字节为单位传输,高位先发送。每个字节后都有应答时段;开始与停止则界定一次传输,而不是每个字节都重新开始一次。
主设备写时,主设备发送数据,从设备接收;主设备读时,从设备发送数据,主设备接收。应答由接收方产生,接收结束还需要按协议处理非应答和停止。
4 地址如何选中设备
常用的 7 位地址方式,在起始后的地址字节中包含 7 位从设备地址和 1 位读写方向。读写位为 0 表示写,为 1 表示读。

协议也定义了 10 位地址方式。课程先以常见的 7 位寻址为主,读驱动时再核对函数参数需要的是哪一种地址表达方式。
5 外设怎样处理这些时序
时钟控制器产生主设备时钟;地址寄存器和比较器参与从设备地址识别;逻辑控制器组织开始、停止、应答以及数据移位。

接收方向则相反:串行数据进入移位寄存器,完整数据转入数据寄存器,再通知程序读取。

下一节 OLED 实验会把抽象的地址与数据转换成可见的像素显示。